package com.tuling.jvm;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by chenhs on 2018/8/3.
 * jdk1.6及之前的版本可重现，方法区和运行常量池溢出
 * jdk1.7及之后重现不了了。。。
 * 【运行时常量池导致的内存溢出异常】
 * VM Args：-XX:PermSize=10M -XX:MaxPermSize=10M
 */
public class RuntimeConstantPoolOOM {

    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        int i = 0;
        while (true) {
            System.out.println(i++);
            list.add(String.valueOf(i++).intern());
        }

        /**** jdk1.6下终于重现了这个异常****

         Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
	        at java.lang.String.intern(Native Method)
	        at com.tuling.jvm.RuntimeConstantPoolOOM.main(RuntimeConstantPoolOOM.java:20)

	    */
    }
}
